//
//  ZPHomeTableViewController.swift
//  Weibo
//
//  Created by 张鹏 on 16/6/23.
//  Copyright © 2016年 张鹏. All rights reserved.
//

import UIKit
import AFNetworking

// cell 可重用标识符
private let statusCellId = "statusCellId"

class ZPHomeTableViewController: ZPVisitorTableViewController {
    
    // 定义保存微博数据的数组
    var statusArray:[ZPStatus] = [ZPStatus]()
    
    let refresh = ZPRefresh()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        /*
         判断用户是否登录
         - 登录
         - 未登录 设置访客视图信息
         */
        if  !isLogin {
            visitorView?.setupVisitorViewInfo(nil, title: nil)
            return
        }
        // 设置tableViewInfo
        setupTableViewInfo()
        
        // 请求微博首页数据
        loadStatusData(activityView.isAnimating())
    }
    
    // 设置tableView 相关属性
    func setupTableViewInfo(){
        // 获取class  格式: 类名.self
        tableView.registerClass(ZPStautsCell.self, forCellReuseIdentifier: statusCellId)
        // 指定tableViewCell 高度
        // 自动计算行高UITableViewAutomaticDimension
        tableView.rowHeight = UITableViewAutomaticDimension
        // 预估行高(预估行高越接近真实高度越好)
        tableView.estimatedRowHeight = 200
        // 设置tableView 分割线显示风格
        tableView.separatorStyle = .None
        // 设置footView
        tableView.tableFooterView = activityView
        // 创建UIRefreshControl
        // 添加事件
        refresh.addTarget(self, action: #selector(ZPHomeTableViewController.refreshAction), forControlEvents: UIControlEvents.ValueChanged)
        
        
        tableView.addSubview(refresh)
    }
    // MARK: - 监听事件
    @objc private func refreshAction(){
        loadStatusData(activityView.isAnimating())
        
        //        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(3 * NSEC_PER_SEC)), dispatch_get_main_queue()) { () -> Void in
        //            // 结束刷新
        //            self.refresh.endRefreshing()
        //        }
        
    }
    // MARK: - 懒加载控件
    private lazy var activityView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        // 设置颜色
        view.color = ThemeColor
        return view
    }()
}
// MARK: - 请求首页数据
extension ZPHomeTableViewController {
    // pullUp 上啦 == true
    func loadStatusData(pullUp: Bool){
        // 如果我们sinceId = 0 && maxId = 0 系统默认就相当于我们只传accessToken
        //        如果 下拉刷新 MaxId = 0 代表我要拿时间最新的微博
        //        如果 上拉加载更多 SinceI的 = 0 代表我要拿时间更早的微博
        
        var sinceId:Int64 = 0
        var maxId:Int64 = 0
        // 上拉加载更多
        if pullUp {
            maxId = statusArray.last?.id ?? 0
            //则返回ID小于或等于max_id的微博
            if maxId > 0 {
                maxId -= 1
            }
            
        }else {
            // 下拉刷新
            sinceId = statusArray.first?.id ?? 0
        }
        
        ZPNetworktools.sharedTools.homeLoadStatusData(sinceId, maxId: maxId, success: { (response) -> () in
            // 菊花停止转动
            self.endRefreshing()
            // 判断我们请求回来数据是否有值 而且是否是一个数组
            guard let res = response?["statuses"] as?[[String: AnyObject]] else {
                print("返回数据为nil 或者 类型不匹配")
                return
            }
            // 定义一个临时数组
            var tempArray:[ZPStatus] = [ZPStatus]()
            // 遍历数组 完成字典转模型
            for dic in res {
                // 初始化模型
                let status = ZPStatus(dict: dic)
                // 保存模型
                tempArray.append(status)
            }
            
            // 上拉加载更多
            if pullUp{
                self.statusArray = self.statusArray + tempArray
            }else{
                // 下拉刷新
                self.statusArray = tempArray + self.statusArray
            }
            // 刷新UI
            self.tableView.reloadData()
            
            
        }) { (error) -> () in
            print("失败:\(error)")
        }
        
    }
    // 结束动画
    func endRefreshing(){
        self.activityView.stopAnimating()
        self.refresh.endRefreshing()
    }
}


extension ZPHomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusArray.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // 创建cell
        let cell = tableView.dequeueReusableCellWithIdentifier(statusCellId, forIndexPath: indexPath) as! ZPStautsCell
        // 给cell赋值
        cell.status = statusArray[indexPath.row]
        return cell
    }
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        // 如果cell滚动到最后一个 而且activityView 没有开启动画
        if statusArray.count == indexPath.row + 1 && !activityView.isAnimating(){
            print(indexPath.row)
            // 开启动画
            activityView.startAnimating()
            // 请求数据
            loadStatusData(activityView.isAnimating())
        }
    }
}
